A wizard is an interactive help utility that guides the user through a potentially complex task. Wizards are often implemented as a sequence of dialog boxes that the user can move forward and backward through, filling in the details required. Expertise is encapsulated in the software wizard, allowing the average user to perform expertly. For example, wizards have been added to software applications to help users configure peripherals. A wizard guides the user through steps such as selecting installation options and ports, installing a software driver, creating links to other applications, and setting other parameters. Wizards thus provide an improved user interface that allows users with less technical sophistication to efficiently use their computer and software applications.
Modern computer users are familiar with the use of file templates. File templates allow a user to create a new file with a readymade set of initial properties, instead of starting work on a new file from scratch. One common template is a letter template in a word processing program, such as MICROSOFT WORD®. A user of such a template may first select the appropriate template, which operates to create a new file with desirable file properties. The user may then be prompted to enter data into several fields. For example, the user may fill in an address field, a date field, a salutation field, and so on. After inserting data into the fields, the user may go on to add additional content to the letter, and save it to a desired location. There are presently many kinds of templates available. Letters, resumes, memos, and so forth are commonly created from word processing application templates, while web pages of various styles are created from templates in webpage editing software, and various files created for software applications are generated from templates in integrated development environments (IDEs).
More particularly, with reference to IDEs, most modem software is typically created with a great deal of computer automated assistance. Such assistance is commercially available through any of a number of IDEs. For example, MICROSOFT'S VISUAL STUDIO®, BORLAND'S C++BUILDER®, METROWERK'S CODE WARRIOR®, and IBM'S WEBSPHERE STUDIO® are all products presently available to assist in software creation. Such products provide a range of useful functions, such as templates for creating new files that may be subsequently adapted to the particular needs of a particular undertaking, coordinating communications between multiple developers working together on large applications, assisting in the actual writing of source code, assisting in specifying how a source code file will be compiled, and providing compilers and other processes that convert source code files and the like into executable files.
While many IDE users are familiar with and commonly use templates, fewer IDE users create their own templates for later use. This is at least in part because the creation of templates in modem IDEs is time-consuming, difficult, and error prone. The creation of at least two separate files is needed to instruct a template building engine in the details of desired template properties. A first file may point to the template wizard dialog for user insertion of file properties, while a second file provides the code for placing and formatting the data entered into the dialog. Because the second file is code that operates in conjunction with the template building engine, the template building engine is more susceptible to attacks, bugs, and malfunction.
The difficulty of creating custom templates in modem IDEs is particularly troublesome in light of the working needs of modem software developers. Developers are a group of computer users who uniquely benefit from the use of templates. Developers understand the details of their own work better than those of a factory-provided template. They may often work on related projects, or improvements and optimizations of past projects, which lend themselves to re-use of previously developed code. Redundant coding is highly inefficient and can be frustrating for developers as they reconsider problems that may have already been thought through.
For example, in early versions of VISUAL STUDIO it was difficult to create new templates and install them into VISUAL STUDIO or to modify existing templates. Templates consisted of multiple files (e.g., .VSZ, .VSDIR, various JScript files), and users were discouraged from modifying these templates by the complexity and the amount of work required. The multi-file format made it difficult to easily exchange templates. Template development was generally limited to VISUAL STUDIO developers.
Thus, in previous implementations of templates, template customization could be achieved by defining the template creation in a JScript file which could call certain defined functions to create the template. However, there are problems with the JScript implementation, such as there is no simplified authoring experience for the default user experience, Jscript is extremely difficult to debug, Jscript is a relatively inflexible programming language, Jscript is not typically a first-level skill in developers who are more familiar with managed code, and limited interfaces are provided for interacting with the project during template creation.
The template architecture has recently been designed to assist less sophisticated users in developing and exchanging content, such as a project template or a project item template. With the template architecture, the templates are driven by a declarative extensible markup language (XML) (e.g., .VSTEMPLATE) file. This file simplifies template creation by declaring, using proscribed XML tags, the contents of the template and the basic steps of its creation.
For some templates, this declarative XML format is too restrictive. Some templates require the ability to perform extensive custom actions, such as showing a custom user interface to gather user input (e.g., build settings, database connection strings, device platform targets, document names) to configure the project, inserting entries into the project's global resources file during item creation, as well as any other custom action not supported by the declarative XML .VSTEMPLATE.
A template wizard is provided in the template architecture. For example, to create a new template for a project or project item, a user would perform a “File” → “Save as Template” command. Such a command walks a user through a wizard which collects information about how the template should be displayed, which files should be included, etc. The wizard generates a single-file template and optionally makes it available for the running instance of VISUAL STUDIO.
However, the wizard is not easily customizable or extended. It would be desirable for a wizard to be easily customizable and extensible.